package sicnu.cs.ich.common.util;


import sicnu.cs.ich.api.common.ResultInfo;
import sicnu.cs.ich.api.common.enums.ResultEnum;

import static sicnu.cs.ich.common.util.RequestUtil.getCurrentUrl;

/**
 * 公共返回对象工具类
 *
 * @author CaiKe
 */
public class ResultInfoUtil {

    /**
     * 请求出错返回
     */
    public static <T> ResultInfo<T> buildError() {
        return build(ResultEnum.ERROR, null);
    }

    public static <T> ResultInfo<T> buildError(ResultEnum resultEnum) {
        return build(resultEnum, null);
    }

    public static <T> ResultInfo<T> buildError(String message) {
        return build(ResultEnum.ERROR.getCode(), message, null);
    }


    public static <T> ResultInfo<T> buildError(ResultEnum resultEnum, String message) {
        return build(resultEnum.getCode(), message, null);
    }

    public static <T> ResultInfo<T> buildSuccess() {
        return build(ResultEnum.OK, null);
    }

    /**
     * 请求成功返回
     */
    public static <T> ResultInfo<T> buildSuccess(T data) {
        return build(ResultEnum.OK, data);
    }

    public static <T> ResultInfo<T> buildSuccess(String message) {
        return build(ResultEnum.OK.getCode(), message, null);
    }
    public static <T> ResultInfo<T> buildSuccess(String message,T date) {
        return build(ResultEnum.OK.getCode(), message, date);
    }
    /**
     * 如果需要返回一个字符串，则使用该方法，否则该字符串将会作为message而不是data
     *
     * @param data
     * @return
     */
    public static ResultInfo<String> buildSuccessWithStr(String data) {
        return build(ResultEnum.OK.getCode(), null, data);
    }

    public static <T> ResultInfo<T> build(ResultEnum resultEnum, T data) {
        return build(resultEnum.getCode(), resultEnum.getMsg(), data);
    }

    /**
     * 构建返回对象方法
     */
    public static <T> ResultInfo<T> build(Integer code, String message, T data) {
        if (code == null) {
            code = ResultEnum.OK.getCode();
        }
        if (message == null) {
            message = ResultEnum.OK.getMsg();
        }
        return ResultInfo.<T>builder()
                .code(code)
                .message(message)
                .path(getCurrentUrl())
                .data(data)
                .build();
    }


}